package com.codi.bus.core.service.organ;

import com.codi.base.exception.BaseAppException;
import com.codi.base.exception.BaseException;
import com.codi.bus.core.resultModel.AccountOpenResult;
import com.codi.bus.core.resultModel.BaseResult;
import com.codi.bus.core.resultModel.LoginResult;
import com.codi.bus.core.resultModel.OrganDataResult;
import com.codi.bus.core.vo.OrganProfileVoNew;
import com.codi.bus.core.vo.UserBankVo;

/**
 * @author lvgo
 * @version 1.0
 * @Description: 机构账户相关 4.6.0版本多机构
 * @date 2018/5/29 9:42
 */
public interface OrganAccountService {

    /**
     * 通过机构id查询机构信息
     *
     * @param profileId 机构id
     * @return
     */
    OrganDataResult queryOrganInfoByProfileId(Long profileId);

    /**
     * 更新机构账户（用于机构开户，审核失败，再发起的操作）
     *
     * @param userId            用户id
     * @param organBankId       机构银行卡id
     * @param organProfileVoNew 机构视图
     * @param userBankVo        银行卡视图
     * @return
     * @throws BaseException
     * @throws BaseAppException
     */
    AccountOpenResult reopen(Long userId, String organBankId, OrganProfileVoNew organProfileVoNew, UserBankVo userBankVo) throws BaseException, BaseAppException;

    /**
     * 机构登录
     *
     * @param mobile    手机号码
     * @param password  登录密码
     * @param deviceId  设备号码
     * @param channelId 登录渠道
     * @param ip        登录ip
     * @return
     */
    LoginResult organLogin(String mobile, String password, String deviceId, String channelId, String ip);

    /**
     * 添加机构开户资料
     *
     * @param userId            用户id
     * @param organProfileVoNew 机构资料
     * @param userBankVo        银行卡资料
     * @return
     * @throws BaseAppException
     */
    BaseResult addOrganProfile(Long userId, OrganProfileVoNew organProfileVoNew, UserBankVo userBankVo) throws BaseAppException;

    /**
     * 机构重置交易密码
     *
     * @param userId      用户id
     * @param profileId   机构id
     * @param authCode    验证码
     * @param newTradePwd 新密码
     * @return
     */
    BaseResult resetOrgTradePwd(Long userId, Long profileId, String authCode, String newTradePwd);
}
